#include "compile_run.hpp"
#include "../comm/httplib.h"
using namespace NS_compile_and_run;
using namespace httplib;

void Usage(std::string str)
{
    std::cerr << "Usage:"<<"\n\t"<<str<<" port"<<std::endl;
}

//调用时格式：./compile_server port
int main(int argc ,char **argv)
{
    // 提供的编译服务，打包形成一个网络服务
    // cpp-httplib
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    Server svr;
    svr.Get("/hello",[](const Request &req,Response &resp){
       //测试
        resp.set_content("hello world","text/plain;");
    });
    svr.Post("/compile_and_run",[](const Request &req,Response &resp){
        //用户http要请求的json string
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
        }
    });
    svr.listen("0.0.0.0",std::stoi(argv[1]));







    // std::string code = "code";
    // Compiler::Compile(code);
    // Runner::Run(code, 1, 2);
    // std::string in_json;
    // Json::Value in_value;
    // // http客户端发来的json字符串
    // // R"()" raw string
    // in_value["code"] = R"(#include<iostream>
    // int main()
    // { 
    //     //while(1);
    //     //int *p = new int[1024*1024*20];
    //     // int a=10;
    //     // a/0;
    //     std::cout << "hhhhh" <<std::endl; 
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;
    // Json::FastWriter writer;
    // in_json = writer.write(in_value);

    // std::cout << in_json << std::endl;
    // // 客户端返回的json串
    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);
    // std::cout << out_json << std::endl;
    // Json::Value in_valu;
    // Json::Reader reader;
    // reader.parse(out_json,in_valu); // 反序列化
    // std::string str = in_valu["reason"].asString();
    // std::cout << str;
    return 0;
}